package com.peng.run_time_data_area;

public class PlusITest {
    public static void main(String[] args) {
//        int i = 10;
//        i = i++;
//        System.out.println(i);
        /**
         * 以上的程序会输出的JVM操作指令如下：
         *         int i = 10;
         *  0 bipush 10   向操作数栈 压栈 byte 10
         *  2 istore_1 将10出栈存入 为局部变量为1号（i）的值
         *
         *
         *   i = i++;
         *  3 iload_1 从局部变量i中加载值压入操作栈，此时值为10，
         *  4 iinc 1 by 1 对局部变量的i的值+1，此时局部变量的i的值为11
         *  7 istore_1 将操作栈中的10重新出栈存入局部变量的i    此时，局部变量的i值重新变为10
         *
         *   System.out.println(i);
         *
         *  8 getstatic #2 <java/lang/System.out>
         * 11 iload_1  从局部变量i中加载值压入操作栈，此时值为10
         * 12 invokevirtual #3 <java/io/PrintStream.println>
         * 15 return
         */


        int i = 10;
        i = ++i;
        System.out.println(i);

        /**
         * 以上的程序会输出的JVM操作指令如下：
         *         int i = 10;
         *  0 bipush 10   向操作数栈 压栈 byte 10
         *  2 istore_1 将10出栈存入 为局部变量为1号（i）的值
         *
         *
         *   i = ++i;
         *  3 iinc 1 by 1 对局部变量的i的值+1，此时局部变量的i的值为11
         *  6 iload_1 从局部变量i中加载值压入操作栈，此时值为11，
         *  7 istore_1 将操作栈中的10重新出栈存入局部变量的i   ，依旧是11
         *
         *   System.out.println(i);
         *
         *  8 getstatic #2 <java/lang/System.out>
         * 11 iload_1  从局部变量i中加载值压入操作栈，此时值为10
         * 12 invokevirtual #3 <java/io/PrintStream.println>
         * 15 return
         */
    }
}
